home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / proc / ds5000.md / procMach.c < prev    next >
C/C++ Source or Header  |  1992-12-18  |  3KB  |  93 lines

  1. /* procMach.c --
  2.  *
  3.  *    Routine to interpret file header.
  4.  *
  5.  * Copyright (C) 1989 Digital Equipment Corporation.
  6.  * Permission to use, copy, modify, and distribute this software and
  7.  * its documentation for any purpose and without fee is hereby granted,
  8.  * provided that the above copyright notice appears in all copies.  
  9.  * Digital Equipment Corporation makes no representations about the
  10.  * suitability of this software for any purpose.  It is provided "as is"
  11.  * without express or implied warranty.
  12.  */
  13.  
  14. #ifndef lint
  15. static char rcsid[] = "$Header: /cdrom/src/kernel/Cvsroot/kernel/proc/ds5000.md/procMach.c,v 9.5 91/07/26 17:11:55 shirriff Exp $ SPRITE (DECWRL)";
  16. #endif /* not lint */
  17.  
  18. #include "sprite.h"
  19. #include "procMach.h"
  20. #include "proc.h"
  21. #include "procInt.h"
  22. #include "status.h"
  23.  
  24.  
  25. /*
  26.  *----------------------------------------------------------------------
  27.  *
  28.  * ProcGetObjInfo --
  29.  *
  30.  *    Translate the object file information into the machine independent
  31.  *    form.
  32.  *
  33.  * Results:
  34.  *    SUCCESS if could translate.
  35.  *    PROC_BAD_AOUT_FORMAT if could not.
  36.  *
  37.  * Side effects:
  38.  *    *objInfoPtr is filled in.
  39.  *
  40.  *----------------------------------------------------------------------
  41.  */
  42. ReturnStatus
  43. ProcGetObjInfo(filePtr, execPtr, objInfoPtr)
  44.     Fs_Stream        *filePtr;
  45.     ProcExecHeader    *execPtr;
  46.     ProcObjInfo        *objInfoPtr;
  47. {
  48.     if (execPtr->fileHeader.magic != PROC_OBJ_MAGIC) {
  49.     return(PROC_BAD_AOUT_FORMAT);
  50.     }
  51.     switch (execPtr->aoutHeader.magic) {
  52.     case PROC_ZMAGIC:
  53.         objInfoPtr->codeLoadAddr = execPtr->aoutHeader.codeStart;
  54.         objInfoPtr->codeFileOffset = 0;
  55.         objInfoPtr->codeSize = execPtr->aoutHeader.codeSize;
  56.         objInfoPtr->heapLoadAddr = execPtr->aoutHeader.heapStart;
  57.         objInfoPtr->heapFileOffset = execPtr->aoutHeader.codeSize;
  58.         objInfoPtr->heapSize = execPtr->aoutHeader.heapSize;
  59.         objInfoPtr->bssLoadAddr = execPtr->aoutHeader.bssStart;
  60.         objInfoPtr->bssSize = execPtr->aoutHeader.bssSize;
  61.         objInfoPtr->entry = execPtr->aoutHeader.entry;
  62.         objInfoPtr->unixCompat = 0;
  63.         break;
  64.     case PROC_OMAGIC:
  65.         if (execPtr->aoutHeader.codeStart+execPtr->aoutHeader.codeSize !=
  66.             execPtr->aoutHeader.heapStart) {
  67.         printf("OMAGIC output file must have data segment %s\n",
  68.             "immediately following text segment.");
  69.         return(PROC_BAD_AOUT_FORMAT);
  70.         }
  71.         if (execPtr->aoutHeader.codeStart <= (Address)DEFAULT_TEXT) {
  72.         printf("OMAGIC text segment is going to collide with %s\n",
  73.             "header segment.");
  74.         return(PROC_BAD_AOUT_FORMAT);
  75.         }
  76.         objInfoPtr->codeLoadAddr = (Address)DEFAULT_TEXT;
  77.         objInfoPtr->codeFileOffset = 0;
  78.         objInfoPtr->codeSize = 0;
  79.         objInfoPtr->heapLoadAddr = execPtr->aoutHeader.codeStart;
  80.         objInfoPtr->heapFileOffset = PROC_CODE_FILE_OFFSET(*execPtr);
  81.         objInfoPtr->heapSize = execPtr->aoutHeader.codeSize +
  82.         execPtr->aoutHeader.heapSize;
  83.         objInfoPtr->bssLoadAddr = execPtr->aoutHeader.bssStart;
  84.         objInfoPtr->bssSize = execPtr->aoutHeader.bssSize;
  85.         objInfoPtr->entry = execPtr->aoutHeader.entry;
  86.         objInfoPtr->unixCompat = 0;
  87.         break;
  88.     default:
  89.         return(PROC_BAD_AOUT_FORMAT);
  90.     }
  91.     return(SUCCESS);
  92. }
  93.